return {
  { -- language server
    'williamboman/mason.nvim',
    config = function()
      require('mason').setup()
    end
  },
  { -- language server bridge
    'williamboman/mason-lspconfig.nvim',
    config = function()
      require('mason-lspconfig').setup({
        'asm_lsp',
        'awk_ls',
        'bashls',
        'clangd',
        'cmake',
        'csharp_ls',
        'cssls',
        'dockerls',
        'dotls',
        'emmet_ls',
        'eslint',
        'gradle_ls',
        'grammarly',
        'hls',
        'html',
        'htmx',
        'jdtls',
        'jsonls',
        'kotlin-language-server',
        'ltex',
        'lua_ls',
        'phpactor',
        'pylsp',
        'remark_ls',
        'sqls',
        'typos_lsp',
        'vimls',
      })
    end
  },
  {
    'neovim/nvim-lspconfig',
    config = function()
      local lspconfig = require('lspconfig')
      lspconfig.asm_lsp.setup {}
      lspconfig.awk_ls.setup {}
      lspconfig.bashls.setup {}
      lspconfig.clangd.setup {}
      lspconfig.cmake.setup {}
      lspconfig.csharp_ls.setup {}
      lspconfig.cssls.setup {}
      lspconfig.dockerls.setup {}
      lspconfig.dotls.setup {}
      lspconfig.emmet_ls.setup {}
      lspconfig.eslint.setup {}
      lspconfig.gradle_ls.setup {}
      lspconfig.grammarly.setup {}
      lspconfig.hls.setup {}
      lspconfig.html.setup {}
      lspconfig.htmx.setup {}
      lspconfig.jdtls.setup {}
      lspconfig.jsonls.setup {}
      lspconfig.kotlin_language_server.setup {}
      lspconfig.ltex.setup {}
      lspconfig.lua_ls.setup {}
      lspconfig.phpactor.setup {}
      lspconfig.pylsp.setup {}
      lspconfig.remark_ls.setup {}
      lspconfig.sqls.setup {}
      lspconfig.typos_lsp.setup {}
      lspconfig.vimls.setup {}
      vim.keymap.set('n', '<C-i>', vim.lsp.buf.hover, {})
    end
  }
}
